;QOPVNQXNxt̖ݖQp
;RQrbgȂ̏ZFFADD64gB
;-----------------
MAIN START
    LAD GR1,N1
    LAD GR2,N2
    LAD GR3,ANS
    CALL MUL32
    RET
;N1N2́AZ̑ΏۂƂȂRQrbg̕Ȃ
N1  DC #0010
    DC #0A05 ;
N2    DC #0000 ; N2  HIWORD
    DC #0007 ;   N2  LOWORD
ANS DS 4 ;Zʂ̂USrbg̕Ȃ̊i[̈
    END
;----------------------------------------------
MUL32 START
    RPUSH
    LAD GR7,TEMP ; TEMP ̃AhX擾
    ;----------------
    LD GR0,0,GR1 ;GR1i܂N1jn܂Q
    ST GR0,2,GR7 ;̈̒lTEMPn܂
    LD GR0,1,GR1 ;S̗̈̂̉ʂQɊi[
    ST GR0,3,GR7 ;
    ;------
    LD GR0,=0 ;
    ;-----
    ST GR0,0,GR7 ;TEMPn܂S̗̈̂
    ST GR0,1,GR7 ;ʂQɃ[i[
    ;-------
    ST GR0,0,GR3 ;GR3i܂ANS)n܂S̗̈
    ST GR0,1,GR3 ;[i[
    ST GR0,2,GR3 ;
    ST GR0,3,GR3 ;@
    ;--------
    LD GR5,=0 ;[vJE^ N2̑[rbgڂ̈Ӗ
    LD GR4,GR2 ; GR2̒lGR4ɑޔ
LOOP LD GR6,GR5
    SUBL GR6,=16 ;Ώۂ LOWORD  HIWORDł邩̔
    JMI LOWORD ;e A@LOWORD  HIWORD ւ̕
    LD GR0,0,GR2 ;N2 HIWORD ̏ȉōs
    SRL GR0,0,GR6
    JUMP TESTBIT
LOWORD LD GR0,1,GR2 ;N2 LOWORD ̏ȉōs
    SRL GR0,0,GR5
TESTBIT AND GR0,=#0001
    JZE EXITLOOP
    ;----------ȉ厖--------------------------------
    LD GR1,GR3   ;ANS ̃AhXGR1ɓB
    LAD GR2,TEMP ;ANS  TEMP ̐l̍v߂B
    CALL ADD64   ;GR1܂ANS TEMP ̒lZB
    ;----------ȏ厖-------------------------
EXITLOOP CPL GR5,=31 ;SRQrbgǂ̔
    JZE EXIT
    ADDL GR5,=1 ;̏ʃrbg鏀
;-----------ȉdv-------------------------
    LAD GR1,TEMP ;TEMP AhX擾
    LAD GR2,TEMP ; f  I@TEMP AhX擾@
    CALL ADD64   ;s閈TEMP̒lQ{ɂȂB
; TEMPilN1j̒lsɂQ{AS{AW{A
; PU{ARQ{AUS{APQW{AEEEƂȂB
;----------ȏdv---------------------------
    LD GR2,GR4 ;GR4ɑޔlGR2ɕA
    JUMP LOOP
EXIT RPOP
    RET
TEMP DS 4 ;ƗpUSrbg̕Ȃ̊i[̈
    END
;------------------
ADD64 START
    RPUSH
    LD GR0,=0
    LAD GR3,3,GR1
    LAD GR4,3,GR2
LOOP LD GR5,=0
    ADDL GR0,0,GR3
    JOV OV1
    JUMP NOV1
OV1 LD GR5,=1 ;  a  I@オm
NOV1 ADDL GR0,0,GR4
    JOV OV2
    JUMP NOV2
OV2 LD GR5,=1  ;  a  I@オm
NOV2 ST GR0,0,GR3
    LD GR0,GR5  ;オʌɉZp
    CPL GR3,GR1 ; GR3 ŏʌƓɂȂH
    JZE EXIT
    SUBL GR3,=1
    SUBL GR4,=1
    JUMP LOOP
EXIT RPOP
    RET
    END
;----------------
